//=======================================Copyright(c)===========================================
// 								  深圳易马达科技有限公司
//---------------------------------------文件信息----------------------------------------------
//文件名   	: VoltBalance.c
//创建人  	: Handry
//创建日期	: 
//描述	    : 电压均衡头文件
//-----------------------------------------------当前版本修订----------------------------------
//修改人   	:
//版本	    :
//修改日期	:
//描述	    :
//=============================================================================================
#ifndef __VOLTBALANCE_H
#define __VOLTBALANCE_H

//=============================================================================================
//头文件
//=============================================================================================
#include "BSPTypeDef.h"

//=============================================================================================
//宏定义
//=============================================================================================
#define		VOLTBALANCE_TICK        100						//均衡任务放置的周期，单位ms
#define		VOLTBALANCE_PERIOD		20000 / VOLTBALANCE_TICK	//均衡检测的周期，单位20000   磷酸铁锂均衡周期20s

#if defined(USE_B20_TOPBAND_PCBA) || defined(USE_B22_IM_PCBA)
#define     VOLT_HIGH_BALA_10S_ON      {BSPGPIOSetPin(BALA_H_ENABLE_PORT,BALA_H_ENABLE_PIN);BITSET32(gVoltBalance.balctrl,31);}
#define     VOLT_HIGH_BALA_10S_OFF     {BSPGPIOClrPin(BALA_H_ENABLE_PORT,BALA_H_ENABLE_PIN);BITCLR32(gVoltBalance.balctrl,31);}

#define     VOLT_LOW_BALA_10S_ON       {BSPGPIOSetPin(BALA_L_ENABLE_PORT,BALA_L_ENABLE_PIN);BITSET32(gVoltBalance.balctrl,30);}
#define     VOLT_LOW_BALA_10S_OFF      {BSPGPIOClrPin(BALA_L_ENABLE_PORT,BALA_L_ENABLE_PIN);BITCLR32(gVoltBalance.balctrl,30);}
#elif defined(USE_B21_IM_PCBA)
#else
#endif

//=============================================================================================
//数据结构定义
//=============================================================================================
typedef struct                      //定义数据结构
{
	u8 enable;						//使能
	u32 testbalctrl;			    //测试均衡控制变量，每一bit代表电池开均衡
    u32 balctrl;		            //均衡控制变量，每一bit代表电池开均衡

    u16 ballowvolt;	                //开启均衡电压下限
    u16 balupvolt;		            //开启均衡电压上限
    u16 balthresh;		            //开启均衡电压差
    u16 baltimer;		            //均衡周期控制计时器
}t_VoltBalance;


//=============================================================================================
//声明变量，供外部使用
//=============================================================================================
extern t_VoltBalance gVoltBalance; //均衡控制结构体

//=============================================================================================
//声明接口函数
//=============================================================================================
//=============================================================================================
//函数名称	: u8 VoltBalanceInit(void)
//输入参数	: void
//输出参数	: 初始化是否成功，TRUE:成功  FALSE:失败
//静态变量	: void
//功    能	: 电压均衡初始化函数
//注    意	:
//=============================================================================================
u8 VoltBalanceInit(void);

//=============================================================================================
//函数名称	: u32 VoltBalanceGetBatValidMask(u8 iseven)
//输入参数	: isodd:是否是偶数节。0:偶数节；1：奇数节
//输出参数	: 输出电池为偶数节或奇数节的电池bit
//静态变量	: void
//功    能	: 检测电池为偶数节或奇数节的电池bit
//注    意	:
//=============================================================================================
u32 VoltBalanceGetBatValidMask(u8 isodd);

//=============================================================================================
//函数名称	: void VoltBalanceTask(void)
//输入参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 电压均衡函数
//注    意	:
//=============================================================================================
void VoltBalanceTask(void);


#endif

/*****************************************end of VoltBalance.h*****************************************/
